From 429346fa7e94b70705121ed9917d5a2d68b7631a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 13 Dec 2016 05:10:05 +0100 Subject: [PATCH] cssimage: Implement a fallback draw() vfunc ... that chains into snapshot. This way, we can stop implementing draw() in GtkCssImage subclasses and focus on snapshot() instead. --- gtk/gtkcssimage.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c index 8797ec900b..d45a3f78d4 100644 --- a/gtk/gtkcssimage.c +++ b/gtk/gtkcssimage.c @@ -22,6 +22,7 @@ #include "gtkcssimageprivate.h" #include "gtkcssstyleprivate.h" +#include "gtksnapshotprivate.h" /* for the types only */ #include "gtk/gtkcssimagecrossfadeprivate.h" @@ -95,6 +96,28 @@ gtk_css_image_real_transition (GtkCssImage *start, return _gtk_css_image_cross_fade_new (start, end, progress); } +static void +gtk_css_image_real_draw (GtkCssImage *image, + cairo_t *cr, + double width, + double height) +{ + GtkSnapshot snapshot; + GskRenderNode *node; + cairo_region_t *clip; + + clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) { 0, 0, width, height }); + gtk_snapshot_init (&snapshot, NULL, clip, "Fallback<%s>", G_OBJECT_TYPE_NAME (image)); + gtk_css_image_snapshot (image, &snapshot, width, height); + node = gtk_snapshot_finish (&snapshot); + + if (node != NULL) + { + gsk_render_node_draw (node, cr); + gsk_render_node_unref (node); + } +} + static void gtk_css_image_real_snapshot (GtkCssImage *image, GtkSnapshot *snapshot, @@ -119,6 +142,7 @@ _gtk_css_image_class_init (GtkCssImageClass *klass) klass->compute = gtk_css_image_real_compute; klass->equal = gtk_css_image_real_equal; klass->transition = gtk_css_image_real_transition; + klass->draw = gtk_css_image_real_draw; klass->snapshot = gtk_css_image_real_snapshot; } -- 2.30.2